package com.broada.apm.indicator.api;

import java.util.List;

import com.broada.apm.model.DictMetrics;
import com.broada.apm.model.L7ModuelPanel;
import com.broada.apm.model.L7moduleMetric;

public interface IndicatorItemService {
	/**
	 * 获取所有指标项
	 * 
	 * @return
	 */
	public List<DictMetrics> listItems();

	/**
	 * 获取某个协议的显示在topo面板上的所有指标项
	 * @param l7protocol
	 * @return
	 */
	public List<L7ModuelPanel> getPanleIndicatorItemByProtocol(L7ModuelPanel panel);
	
	/**
	 * 获取某一协议的所有指标项
	 * @param l7protocol
	 * @return
	 */
	public List<DictMetrics> getDictMetricsByProtocol(int l7protocol);

	/**
	 * 根据ID获取指标项
	 * @param itemId
	 * @return
	 */
	public DictMetrics getItemById(int itemId);

	/**
	 * 根据code获取指标项
	 * @param code
	 * @return
	 */
	public DictMetrics getDictMetricsByCode(String code);

	/**
	 * 新增指标项
	 * @param dictMetrics
	 */
	public void addDictMetrics(DictMetrics dictMetrics);

	/**
	 * 新增某个协议的指标项
	 * @param l7Metric
	 */
	public void addL7ModuleMetric(L7moduleMetric l7Metric);

	/**
	 * 新增某个协议的topo面板上的指标项
	 * @param panel
	 */
	public void addL7ModulePanel(L7ModuelPanel panel);

	/**
	 * 获取协议指标表中某一协议的所有指标
	 * @param l7Metric
	 * @return
	 */
	public List<L7moduleMetric> getL7ModuleMetric(L7moduleMetric l7Metric);

	/**
	 * 获取topo协议指标表中某一协议的所有指标
	 * @param panel
	 * @return
	 */
	public List<L7ModuelPanel> getL7ModulePanel(L7ModuelPanel panel);
	
	/**
	 * 删除某一协议的指标项
	 * @param moduleId
	 */
	public List<L7moduleMetric> deleteMetricsByModuleId(String moduleId);

	/**
	 * 更新指标项
	 * @param dictMetrics
	 */
	public void updateDictMetrics(DictMetrics dictMetrics);
	
	/**
	 * 更新某一协议的指标项
	 * @param l7Metric
	 */
	public void updateL7ModuleMetric(L7moduleMetric l7Metric);
	
	/**
	 * 删除topo面板上某一协议的指标项
	 * @param moduleId
	 */
	public List<L7ModuelPanel> deleteL7PanelByModuleId(String moduleId);
	
	/**
	 * 更新topo面板某个协议的指标项
	 * @param panel
	 */
	public void updateL7ModulePanel(L7ModuelPanel panel);
	
	/**
	 * 根据条件查询协议指标项
	 * @param conn
	 * @return
	 */
	public List<L7moduleMetric> listItemsByCondition(L7moduleMetric conn);

	/**
	 * 更新某一服务节点或关键交易的指标项
	 * @param targetId
	 * @param metricIds
	 */
	public void updateResShowIndicator(String targetId, String panelId, List<Integer> metricIds);
	
	/**
	 * 获取某一服务节点或关键交易的指标项
	 * @param targetId
	 * @return
	 */
	public List<Integer> getResShowIndicator(String targetId, String panelId);
}
